package com.baiku.sanhos.mapper;

import com.baiku.sanhos.pojo.entity.Doctor;
import com.baiku.sanhos.pojo.vo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

import javax.print.Doc;
import java.util.List;

@Repository
public interface DoctorMapper extends BaseMapper<Doctor> {
    /**
     * 增：新增模态框
     * @param doctorIndexVo
     */
    int insert(DoctorIndexVo doctorIndexVo);

    /**
     *删：根据id实现多删除功能
     * @param ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 删：根据id实现删除功能
     * @param id
     */
    int deleteById(Integer id);

    /**
     * 查：根据姓名查找医生
     * @param username
     * @return
     */
    DoctorVo selectByUserName(String username);

    /**
     *查：查询全部医生数据（包括模糊查询），并且实现分页
     * @param pageSize
     * @param offset
     * @param no
     * @param nickName
     * @return
     */
    List<DoctorIndexVo> selectAll(int pageSize,int offset,String no,String nickName);

    /**
     * 查：通过id查询医生的全部信息
     * @param id
     * @return
     */
    Doctor selectById(Integer id);

    /**
     * 查：根据日期和科室id查询医生排班号源
     * @param deptId 科室id
     * @param date 日期
     * @return 医生排班和号源数据
     */
    List<DoctorSourceVo> listByDeptIdAndDate(Integer deptId,String date);

    /**
     * 查询 查询未来七天的科室医生号源信息
     * @return 医生排班和号源数据
     * todo 存入到es中
     */
    List<DoctorSourceVo> listDeptDoctorSource();
    /**
     * 查：根据日期和医生工号查询医生排班号源
     * @param doctorNo 医生工号
     * @param date 日期
     * @return 医生排班和号源数据
     */
    List<DoctorSourceVo> listByDoctorNoAndDate(String doctorNo,String date);
    /**
     * 查：根据科室id查询医生排班号源
     * @param deptId 科室id
     * @return 医生排班和号源数据
     */
    List<DoctorInfoVo> listByDeptId(Integer deptId);

    /**
     * 查：根据父级科室id查询子科室医生排班号源等信息
     * @param ParentDeptId 父级科室id
     * @return 子科室医生排班和号源数据
     */
    List<DoctorInfoVo> listByParentDeptId(Integer ParentDeptId);

    /**
     * 查询子科室医生今日号源等信息
     * @return 子科室医生排班和号源数据
     *
     */
    List<DoctorInfoVo> listTodayDoctorSource();

    /**
     * 查：根据医生工号查询科室id
     * @param doctorNo 医生工号
     * @return 返回科室id
     */
    Integer getDeptByDoctorNo(String doctorNo);

    /**
     * 查：查询医生总数
     * @param no
     * @return
     */
    int CountNoDoctor(String no);

    /**
     * 查：查询全部医生数据（包括模糊查询）
     * @param no
     * @param nickName
     * @return
     */
    int getTotalDoctors(String no,String nickName);

    /**
     * 改：模态框更新操作
     * @param doctorIndexVo
     */
    void updateDoctorById(DoctorIndexVo doctorIndexVo);

    /**
     * 改：根据id来修改医生的启用，禁用状态
     * @param id
     * @param status
     */
    void updateById(Integer id,Integer status);
    List<DoctorDetailVO> selectAllNoName(int pageSize, int offset, String no, String username);
    DeptVo selectByIdNoName(Integer id);
    int getTotalDoctorsBooking(String username, String nickName);
    List<BookingVO> selectAllBooking(int pageSize, int offset, String username, String nickName);
    List<BookingVO> selectByDoctorNoAndNickName(String username, String nickName);
    List<DoctorDetailVO> selectByNoAndUserName(String no, String username);

    List<DoctorIndexVo> selectByDeptId(Integer deptId);


    void updateDoctorById1(DoctorIndexVo doctorIndexVo);

    DoctorIndexVo selectByIdDoctor(Integer id);

    void updatePassword(String username, String password1);

    void updatePhone(String username, String newPhone);

    void updateProfilePicture(String username, byte[] imageBytes);

    void updateUrl(String newUrl,String username);

    void updateEmail(String username, String newEmail);
}
